home *** CD-ROM | disk | FTP | other *** search
- program Dynamic_Object_Demo;
-
- { DYN-DEMO.PAS }
-
- uses Crt, Dos;
-
- type
- ScrPtr = ^SaveScreen;
- BoxPtr = ^ReportBox;
- SaveScreen = array[1..80,1..25] of word;
- ReportBox = object
- SavPtr: ScrPtr; FColor, BColor: byte;
- WPosX, WPosY, WSizeX, WSizeY: integer;
- constructor Init( PtX, PtY, Width, Height,
- C1, C2 : integer );
- destructor Done;
- procedure Draw;
- procedure Erase;
- end;
-
- {==========================================}
- { implementation for object type ReportBox }
- {==========================================}
-
- constructor ReportBox.Init;
- var
- i, j: integer;
- Regs: Registers;
- begin
- WPosX := PtX;
- WPosY := PtY;
- WSizeX := Width;
- WSizeY := Height;
- FColor := C1;
- BColor := C2;
- New( SavPtr ); { allocate memory for array }
- window( WPosX, WPosY, WPosX+WSizeX-1,
- WPosY+WSizeY-1 );
-
- {read character and attribute on video page 0}
-
- for i := 1 to WSizeX do
- for j := 1 to WSizeY do
- begin
- gotoxy(i,j);
- Regs.AH := 08;
- Regs.BH := 00;
- intr( $10, Regs );
- SavPtr^[i,j] := Regs.AX;
- end;
- Draw;
- end;
-
- destructor ReportBox.Done;
- begin
- Erase;
- Dispose( SavPtr );
- end;
-
- procedure ReportBox.Erase;
- var
- i, j : integer;
- Regs : Registers;
- begin
- window( WPosX, WPosY,
- WPosX+WSizeX-1, WPosY+WSizeY-1 );
- ClrScr; { inner window }
-
- { Write character and attr on video page 0 }
-
- { AL stores the character value }
- { BL stores the attribute value }
- { CL stores the repititions value (1) }
-
- for i := 1 to WSizeX do
- for j := 1 to WSizeY do
- begin
- gotoxy(i,j);
- Regs.AH := 09;
- Regs.BH := 00;
- Regs.AL := lo( SavPtr^[i,j] );
- Regs.BL := hi( SavPtr^[i,j] );
- Regs.CL := 1;
- intr( $10, Regs );
- end;
- window( 1, 1, 80, 25 );
- end;
-
- procedure ReportBox.Draw;
- var
- BoxStr : string[6];
- i : integer;
- MemSize : longint;
- begin
- TextColor( FColor );
- TextBackground( BColor );
- BoxStr := #$C9 + #$CD + #$BB +
- #$BA +#$BC + #$C8;
- window( WPosX, WPosY,
- WPosX+WSizeX-1, WPosY+WSizeY-1 );
- ClrScr;
- gotoxy( 1, 1 ); write( BoxStr[1] );
- for i := 1 to WSizeX-2 do write( BoxStr[2] );
- write( BoxStr[3] );
- gotoxy( 1, WSizeY-1 ); write( BoxStr[6] );
- for i := 1 to WSizeX-2 do write( BoxStr[2] );
- write( BoxStr[5] );
- gotoxy( 1, 2 );
- InsLine;
- for i := 2 to WSizeY-1 do
- begin
- gotoxy( 1, i ); write( BoxStr[4] );
- gotoxy( WSizeX, i ); write( BoxStr[4] );
- end;
- window( WPosX+1, WPosY+1,
- WPosX+WSizeX-2, WPosY+WSizeY-2 );
- ClrScr;
- MemSize := MemAvail;
- for i := 1 to 30 do
- write('Memory now = ',MemSize,' bytes! ');
- window( 1, 1, 80, 25 );
- end;
-
- { **** end of methods **** }
-
- var
- Box : array[1..5] of BoxPtr;
- MemSize : longint;
- i : integer;
-
- procedure Prompt;
- begin
- gotoxy( 1, 1 ); clreol;
- write('Memory now = ', MemAvail,
- '. Press ENTER to continue ');
- readln;
- end;
-
- begin
- ClrScr;
- TextColor( White );
- TextBackground( Black );
- MemSize := MemAvail;
- for i := 1 to 100 do
- write(' Initial memory available = ',
- MemSize, ' bytes! ' );
- gotoxy( 1, 1 ); clreol;
- write('Press ENTER to continue ');
- readln;
- Box[1] := New( BoxPtr, Init( 5, 12, 30, 10,
- LightRed, Black ) );
- gotoxy( 1, 1 ); clreol;
- write('Memory now = ', MemAvail,
- '. Press ENTER to continue ');
- readln;
- Box[2] := New( BoxPtr, Init( 40, 5, 30, 10,
- LightGreen, Blue ) );
- gotoxy( 1, 1 ); clreol;
- write('Memory now = ', MemAvail,
- '. Press ENTER to continue ');
- readln;
- Dispose( Box[1], Done );
- Dispose( Box[2], Done );
- gotoxy( 1, 1 ); clreol;
- write( 'Final memory (after release) = ',
- MemAvail, ' bytes...');
- readln;
- end.